perm filename INTFAC.FAI[SYS,HE]4 blob sn#048164 filedate 1973-06-08 generic text, type T, neo UTF8
00100		TITLE INTFAC
00200		INTERNAL DOIT,ARMPOS,ARM.JOINT,PACK
00300		INTERNAL HANDFN,ARMFN,ARMPROCEED
00400		EXTERNAL ARM.VECTOR,ARM.MOTION,ARM.STATUS,ARM.SEG
00500		EXTERNAL ARM.WAIT,FELT,STOP.ON,ARM.TO
00600		EXTERNAL ARM.MESSAGE
00700	
00800		P←17
00900		MASTER←←16660
01000		RELOC←←40
01100		TOUCH←←10
01200		HOLD←←20
01300	
01400	ARM.JOINT:MOVEI 
01500		SKIPA
01600	ARMPOS:	MOVEI 1
01700		HRLI MASTER
01800		MOVEM EXE
01900		CALLI 1,30
02000		MOVEM 1,SEGJOB
02100		JSR ISSERV
02200	SEN1:	SEND REQU
02300		JRST[		MOVEI 1,2
02400				CALLI 1,31
02500				JRST SEN1]
02600		WRCV EXE
02700		MOVE 1,ARM.VE
02800		MOVEI 2,6(1)
02900		HRLI 1,THETA
03000		BLT 1,(2)
03100		MOVE 1,STATUS
03150		MOVEM 1,ARM.STATUS
03200	RETN:	POPJ 17,
03300	
03400	REQU:	SIXBIT/[ARM]/
03500		EXE
03600	
     

00100	;	THIS IS THE 32 WORD MAIL MESSAGE
00200	
00300	EXE:	XWD MASTER,0	;18-27 NARGS, 30 RELOC, 31 HOLD, 32 SOTCH, 33-35 EXE
00400				;0 READ IN OCTAL
00500				;1 READ IN DECIMAL
00600				;2 EXECUTE FILE
00700				;3 EXECUTE FUNCTION
00800	FILE:	0
00900	PPPN:	0
01000	BAND:	0
01100	SEGJOB:	0
01200	NAME:	0
01300	STATUS:	0
01400	SEGMENT:0
01500	NERVES:	0
01600	ETOR:	0
01700	THETA:	0
01800	ARGS:	BLOCK =21
01900	
     

00100	PACK:	;(INTEGER PTR,TIME;REFERENCE REAL SOLN);
00200		MOVE 10,-3(P)
00300		MOVE 1,-2(P)
00400		MOVEM 1,(10)	;TIME
00500		HRLZ 5,-1(P)
00600		BLT 5,4		;PICK UP A0-A4
00700		MOVM 6,4	;WHERE THE LARGEST WILL END UP
00800		MOVEI 5,3
00900	L1:	MOVM 7,(5)
01000		CAMGE 6,7
01100		MOVE 6,7
01200		SOJGE 5,L1
01300		TDZ 6,[XWD 777,777777]	;THE LARGEST IS NOW IN 6
01400		ADD 6,[XWD  12000,0]	;THE EXPONENT TO PUT FRACTION AND SIGN INTO RT. HALF
01500		HLLM 6,-1(10)
01600		UFA 6,4
01700		HRLM 7,-3(10)
01800		UFA 6,3
01900		HRRM 7,-3(10)
02000		UFA 6,2
02100		HRLM 7,-2(10)
02200		UFA 6,1
02300		HRRM 7,-2(10)
02400		UFA 6,0
02500		HRRM 7,-1(10)
02600		SUB P,[XWD 4,4]
02700		JRST @4(P)
02800	
     

00100	ISSERV:	0
00200	SEE:	MOVE 1,[SIXBIT/[ARM]/]
00300		CALLI 1,400043
00400		JRST[	CAIE 1,1
00500			JRST[	OUTSTR[ASCIZ/THERE ARE TOO MANY SERVOS ALREADY
00600	PLEASE KILL THEM ALL BUT ONE AND TYPE RET
00700	/]
00800				INCHWL
00900				INCHWL
01000				JRST SEE]
01100			PTYGET 10
01200			JRST[	OUTSTR[ASCIZ/NO PTYS AVAILABLE
01300	/]
01400				CALLI 12]
01500			HRLI 10,0
01600		GJ:	MOVEI 11,[ASCIZ/L
01700	/]
01800			PTWRS7 10
01900		WH:	PTRD1W 10
02000			CAIE 11,"#"
02050			JRST[	CAIE 11,"?"
02100				JRST WH
02150				OUTSTR[ASCIZ\NO JOB FOR SERVO
02175	TYPE C/R TO TRY AGAIN
02185	\]
02195				INCHWL
02197				INCHWL
02198				JRST GJ]
02200			MOVEI 11,[ASCIZ/SYS,HE
02300	/]
02400			PTWRS7 10
02500		WCC:	PTRD1W 10
02600			CAIE 11,"↑"
02700			JRST WCC
02800			MOVEI 11,[ASCIZ/RUN ARM
02900	/]
03000			PTWRS7 10
03100		WCC2:	PTRD1W 10
03200			CAIE 11,"!"
03300			JRST WCC2
03400			JRST @ISSERV]
03500	GOTONE:	JRST @ISSERV
03600	
     

00100	DOIT:	MOVE 1,-1(17)
00200		MOVEM 1,FILE
00300		MOVEM 1,ARM.WAIT
00400		MOVE 1,-2(17)
00500		HRRZM 1,BAND
00600		MOVEI 2
00700		SETZ 1,
00800		CALLI 1,24
00900		MOVEM 1,PPPN
01000		JSR ISSERV
01100		PUSHJ P,ACT
01200	RETM:	SUB 17,[XWD 3,3]
01300		JRST @3(17)
01400	
01500	ARMFN:	MOVEI 3+HOLD+RELOC
01600		HRL 1,ARM.ME
01700		HRRI 1,ARGS
01800		BLT 1,ARGS+24
01900		MOVE 1,-1(17)
02000		DPB 1,[POINT 9,0,26]
02100		PUSHJ P,ACT
02200		SUB P,[XWD 2,2]
02300		JRST @2(P)
02400	
02500	HANDFN:	MOVEI 3+HOLD
02600		MOVE 1,ARM.ME
02700		MOVE 1,(1)
02800		MOVEM 1,ARGS
02900		JRST ACT
03000	
03100	ARMPRO:	MOVE 1,-1(P)
03200		MOVEM 1,ARGS
03300		MOVEI 3
03400		PUSHJ P,ACT
03500		SUB P,[XWD 2,2]
03600		JRST @2(P)
03700	
     

00100	ACT:	HRLI MASTER
00200		SETZM ARM.STATUS
00300		SKIPE STOP.ON
00400		TRO TOUCH
00500		MOVEM EXE
00600		MOVE 1,ARM.WAIT
00700		MOVEM 1,ARM.MOTION
00800		SETZM ARM.WAIT
00900		SEND REQU
01000		JRST[		MOVEI 1,2
01100				CALLI 1,31
01200				JRST .-1]
01300		WRCV EXE
01400		MOVE 1,ARM.VE
01500		MOVEI 2,6(1)
01600		HRLI 1,THETA
01700		BLT 1,(2)
01800		MOVE 1,ARM.TO
01900		MOVEI 2,5(1)
02000		HRLI 1,ARGS+10
02100		BLT 1,(2)
02200		MOVE 1,ARM.MOTION
02300		MOVEM 1,ARM.WAIT
02400		SETZM ARM.MOTION
02500		MOVE 1,STATUS
02600		MOVEM 1,ARM.STATUS
02700		POPJ P,
02800	
02900		END